/*
 * Copyright 2013 University of Padua, Italy
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package it.dei.unipd.healthservice.database;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import it.dei.unipd.healthservice.resource.*;

/**
 * Visualizza le caratteristiche di un dato prodotto.
 * 
 * @author Simone Zennaro
 * @version 1.00
 */
public class ViewProdottoDatabase {
	/**
	 * Interrogazione al database per estrarre i dati di un dato prodotto
	 */
	private static final String RICERCA_PER_PRODOTTO = "SELECT * FROM prodotto WHERE idprodotto=?;";
	
	/**
	 * Interrogazione al database per estrarre i dati dei prodotti
	 */
	private static final String RICERCA_PRODOTTI = "SELECT * FROM prodotto ";
	
	private final Connection con;
	

	/**
	 * Crea una nuovo oggetto per reperire i dati di un prodotto dal DB
	 * @param con connessione al database
	 */
	public ViewProdottoDatabase(Connection con){
		this.con=con;
	}
	
	/**
	 * Cerca nel DB un prodotto e lo restituisce se presente
	 * 
	 * @param idProdotto id del prodotto da cercare
	 * @return Prodotto cercato se presente
	 * @throws SQLException
	 *             in caso di problemi nell'accesso al database.
	 */
	public Prodotto getProdotto(int idProdotto) throws SQLException {

		PreparedStatement pstmt = null;
		ResultSet rs = null;
		Prodotto prodotto=null;
		try {
			
			pstmt = con.prepareStatement(RICERCA_PER_PRODOTTO);
			pstmt.setInt(1, idProdotto);
			
			rs = pstmt.executeQuery();
			
			if(rs.next())
				prodotto=new Prodotto(rs.getInt("idprodotto"),rs.getString("nome"),rs.getString("immagine"),
									  rs.getBoolean("aRichiesta"),Float.parseFloat(rs.getString("prezzo").substring(1)),
									  rs.getString("descrizione"),rs.getString("categoria_nome"));
			
		}
		finally {
			if (rs != null)
				rs.close();
			if (pstmt != null)
				pstmt.close();
			con.close();
		}
		return prodotto;
	}
	/**
	 * Cerca nel DB i prodotti e li restituisce
	 * 
	 * @return prodotti
	 * @throws SQLException
	 *             in caso di problemi nell'accesso al database.
	 */
	public ArrayList<Prodotto> search() throws SQLException {

		PreparedStatement pstmt = null;
		ResultSet rs = null;
		ArrayList<Prodotto> prodotti=new ArrayList<Prodotto>();
		try {
			
			pstmt = con.prepareStatement(RICERCA_PRODOTTI);
			
			rs = pstmt.executeQuery();
			
			while(rs.next())
				prodotti.add(new Prodotto(rs.getInt("idprodotto"),rs.getString("nome"),rs.getString("immagine"),
									  rs.getBoolean("aRichiesta"),Float.parseFloat(rs.getString("prezzo").substring(1)),
									  rs.getString("descrizione"),rs.getString("categoria_nome")));
			
		}
		finally {
			if (rs != null)
				rs.close();
			if (pstmt != null)
				pstmt.close();
			con.close();
		}
		return prodotti;
	}
}